﻿using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Win.UI.Mantenimientos;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Reportes;

namespace Fuyao.Win.UI.Ventas
{

    public partial class frmSelectOrderDetail : Form
    {
        BusinessLogic bc = new BusinessLogic();
        List<DetalleVenta> listDetalleVenta = new List<DetalleVenta>();
        private string nroPedido;
        private int tipoVentaID;

        #region Properties
        public List<DetalleVenta> ListDetalleVentaToReceive { get; set; }
        public List<DetalleVenta> ListDetalleVentaToReturn { get; set; }
        #endregion

        public frmSelectOrderDetail(string nroPedido, int tipoVentaID)
        {
            InitializeComponent();
            this.nroPedido = nroPedido;
            this.tipoVentaID = tipoVentaID;
        }

        private void loadUI()
        {
            Pedido bePedido = bc.getGuiaInternaByNroPedido(nroPedido);

            DetalleVenta oDetalleVenta;
            foreach (DetallePedido oDetallePedido in bePedido.DetallePedidos)
            {
                oDetalleVenta = new DetalleVenta();

                oDetalleVenta.ProductoID = oDetallePedido.ProductoID;
                oDetalleVenta.Cantidad = Convert.ToInt32(Utilitarios.IsNumericWithReturnValue(oDetallePedido.Cantidad));
                oDetalleVenta.CodigoProducto = oDetallePedido.CodigoProducto;
                oDetalleVenta.DescripcionProducto = oDetallePedido.DescripcionProducto;
                oDetalleVenta.PrecioUnitario = oDetallePedido.PrecioUnitario;
                oDetalleVenta.Importe = Convert.ToDecimal(Utilitarios.IsNumericWithReturnValue(oDetallePedido.PrecioUnitario)) * Convert.ToInt32(Utilitarios.IsNumericWithReturnValue(oDetallePedido.Cantidad));
                listDetalleVenta.Add(oDetalleVenta);
            }

            foreach (DetalleVenta oDetalleVentaChecked in ListDetalleVentaToReceive)
            {
                foreach (DetalleVenta oDetalleVentaFromOrder in listDetalleVenta)
                {
                    if (oDetalleVentaChecked.ProductoID == oDetalleVentaFromOrder.ProductoID)
                    {
                        oDetalleVentaFromOrder.IsChecked = true;
                    }
                }
            }

            dgvDetalles.DataSource = null;
            dgvDetalles.DataSource = listDetalleVenta;

        }

        private void setColumnasGrilla()
        {
            colProducto.DataPropertyName = "CodigoProducto";
            colDescripcion.DataPropertyName = "DescripcionProducto";
            colCantidad.DataPropertyName = "Cantidad";
            colPrecio.DataPropertyName = "PrecioUnitario";
            colDescuento.DataPropertyName = "Descuento";
            colImporte.DataPropertyName = "Importe";
            colIsChecked.DataPropertyName = "IsChecked";
        }

        private void frmVentas_Load(object sender, EventArgs e)
        {
            Utilitarios.configurarGrilla(ref dgvDetalles);
            setColumnasGrilla();
            loadUI();
        }

        private void dgvDetalles_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
        {
            if (e.ColumnIndex == colProducto.Index || e.ColumnIndex == colDescripcion.Index || e.ColumnIndex == colImporte.Index
                || e.ColumnIndex == colCantidad.Index || e.ColumnIndex == colDescuento.Index)
                e.Cancel = true;
        }


        private void CalculateTotals()
        {
            //decimal totalDescuentoGrilla = 0;
            //decimal subTotal = 0;
            //decimal descuento = Convert.ToDecimal(Utilitarios.IsNumericWithReturnValue(txtDescuento.Text));
            //decimal totalBruto = 0;
            //decimal igv = Convert.ToDecimal(Utilitarios.IsNumericWithReturnValue(lblIGV.Text));

            //foreach (DetalleVenta oDetalleVenta in beVenta.DetalleVentas)
            //{
            //    subTotal += oDetalleVenta.Importe;
            //    totalDescuentoGrilla += Convert.ToDecimal(Utilitarios.IsNumericWithReturnValue(oDetalleVenta.Descuento));
            //}

            //totalBruto = subTotal - descuento;
            //txtTotalDescuentoGrilla.Text = Convert.ToString(totalDescuentoGrilla);
            //txtTotalBruto.Text = Convert.ToString(totalBruto);
            //txtDescuento.Text = Convert.ToString(descuento);

            //decimal igvFormula = (Convert.ToDecimal(subTotal) / Convert.ToDecimal(1.18)) * Convert.ToDecimal(0.18);
            //decimal subtotal = Convert.ToDecimal(subTotal) / Convert.ToDecimal(1.18);

            //txtIGV.Text = igvFormula.ToString("N2");  //Convert.ToString((totalBruto * igv) / 100);
            //txtSubtotal.Text = (subtotal - descuento).ToString("N2"); //Convert.ToString(subTotal - (totalBruto * igv) / 100);
            //txtMontoTotal.Text = (subtotal + igvFormula).ToString("N2");

        }


        private void dgvDetalles_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {
            if (dgvDetalles.IsCurrentCellDirty)
            {
                if (e.ColumnIndex == colCantidad.Index || e.ColumnIndex == colPrecio.Index || e.ColumnIndex == colDescuento.Index)
                {
                    if (!Utilitarios.IsNumeric(e.FormattedValue))
                    {
                        MessageBox.Show("Ingrese una dato válido o presion ESC", "Sistema FUYAO - Mensaje de Validación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        e.Cancel = true;
                    }
                }
                VariablesGlobales.IsDataGridViewCellDirty = true;
            }
            else
                VariablesGlobales.IsDataGridViewCellDirty = false;
        }

        private void btnAddProduct_Click(object sender, EventArgs e)
        {
            ListDetalleVentaToReturn = new List<DetalleVenta>();
            decimal totalImporte = 0;
            foreach (DataGridViewRow row in dgvDetalles.Rows)
            {
                if (row.Cells[colIsChecked.Index].Value != null && Convert.ToBoolean(row.Cells[colIsChecked.Index].Value) == true)
                {
                    ListDetalleVentaToReturn.Add((DetalleVenta)row.DataBoundItem);
                    totalImporte += Convert.ToDecimal(((DetalleVenta)row.DataBoundItem).Cantidad * ((DetalleVenta)row.DataBoundItem).PrecioUnitario);
                }
            }

            if (this.tipoVentaID == Constantes.VENTA_FACTURA_ID)
            {
                if (totalImporte > 3500)
                {
                    if (MessageBox.Show("Usted, se ha excedido en el monto máximo de S/.3500 permitido en la factura. Monto actual " + totalImporte + Environment.NewLine + " Desea continuar?", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        this.Close();
                    }
                }
                else this.Close();
            }
            else
            {
                if (totalImporte > 650)
                {
                    if (MessageBox.Show("Usted, se ha excedido en el monto máximo de S/.650 permitido en la boleta. Monto actual " + totalImporte + Environment.NewLine +  " Desea continuar?", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                    {
                        this.Close();
                    }
                }
                else this.Close();
            }
        }

    }
}
